package kotlin05.src.main.java.com.example.kotlin05.s03

/**
 * 95.fold
 *
 * 也是可以用来合并值的合并函数
 * 这个合并函数接受一个初始累加器值，随后会根据匿名函数的结果更新
 *
 *
 * //TODO: 双击shift键，可以搜索
 * //Todo:为什么要使用函数式编程？
 * //TODO:对比，实现同样的任务，Java版本和函数式版本的代码量差不多仔细分析，可以看出函数式编程的诸多优势
 * //TODO:累加变量（shirtSIZE）都是隐式定义的
 * //TODO:函数运算结果会自动赋值给累加变量，降低代码出错的集合
 * //TODO:执行新任务的函数很容易添加到函数的调用链上，因为他们都兼容Iterable类型
 * //TODO:
 *
 */


fun main() {

    /*listOf(1,2,3,4).fold(0,{ accumulator,number->
        println("accumulator value:$accumulator")
        accumulator + (number * 3)

    })*/

    //(1+2+3+4)*3
    val fold = listOf(1, 2, 3, 4).fold(0) { accumulator, number ->
        println("accumulator value:$accumulator")
        accumulator + (number * 3)

    }

    println(fold)

}